home *** CD-ROM | disk | FTP | other *** search
- /*-- AutoRev header do NOT edit!
- *
- * Program : Goto.c
- * Copyright : Copyright © 1991-92 Jab Development
- * Author : Jan van den Baard
- * Creation Date : 05-Apr-92
- * Current version : 2.0
- * Translator : Dice v2.06.40
- *
- * REVISION HISTORY
- *
- * Date Version Comment
- * --------- ------- ------------------------------------------
- * 05-Apr-92 2.0 Goto % & line routine. (rewrite)
- *
- *-- REV_END --*/
-
- #include "View.h"
-
- Prototype void Goto( long );
-
- extern struct Window *vwWindow;
- extern struct AsciiText *vwText;
- extern struct Line *vwFirst, *vwLast;
- extern ULONG vwNum, vwShown;
- extern UWORD vwMaxLin;
- extern UBYTE ClearStr[];
- #ifdef __DETACH
- extern ULONG *vwArgs;
- #else
- extern ULONG vwArgs[];
- #endif
-
- extern __far struct Custom custom;
-
- void Goto( long how )
- {
- struct Line *line;
- ULONG sizex = NULL, sizen = NULL, i, ln, max, min, num;
- UBYTE *title;
-
- if ( ! vwText ) return;
-
- if ( how == GT_PERC ) {
- title = "Type percentage...";
- min = 0;
- max = 100;
- num = vwNum;
- } else {
- title = "Type line number...";
- min = 1;
- max = vwText->NumLines - vwText->NumSplit;
- for ( line = vwText->First, num = 1; line != vwFirst; line = line->Next ) {
- if (( line->Flags & LNF_Split ) != LNF_Split ) num++;
- }
- }
-
- if ( vwArgs[ 11 ] ) ON_SPRITE;
-
- if ( rtGetLong( &num, title, NULL, RT_ReqPos, REQPOS_CENTERSCR,
- RT_WaitPointer, TRUE,
- RTGL_Min, min,
- RTGL_Max, max,
- RTGL_ShowDefault, TRUE,
- TAG_DONE )) {
- switch( how ) {
- case GT_PERC:
- vwNum = num;
-
- if ( vwNum == 100 )
- Bottom();
- else if ( ! vwNum )
- Top();
- else {
- sizen = vwNum * vwText->NumBytes / 100;
-
- for ( line = vwText->First; line->Next; line = line->Next ) {
- sizex += line->Size;
- if ( sizex > sizen ) break;
- }
-
- vwFirst = line;
-
- for ( i = 1; i < vwMaxLin; i++ )
- if (( vwFirst = vwFirst->Prev ) == vwText->First ) break;
-
- vwLast = vwFirst;
-
- for ( i = 1; i < vwMaxLin; i++ )
- if (( vwLast = vwLast->Next ) == vwText->Last->Next ) break;
-
- displayIt:
-
- vwShown = NULL;
-
- for ( line = vwText->First; line != vwLast->Next; line = line->Next )
- vwShown += line->Size;
-
- Inform( ClearStr );
- DisplayText();
- }
- break;
-
- case GT_LINE:
- for ( line = vwText->First, ln = 1; ln != num; line = line->Next ) {
- if (( line->Flags & LNF_Split ) != LNF_Split ) ln++;
- }
-
- vwLast = line;
-
- for ( i = 1; i < vwMaxLin; i++ ) {
- if (( vwLast = vwLast->Next ) == vwText->Last->Next ) {
- vwLast = vwText->Last;
- break;
- }
- }
-
- vwFirst = vwLast;
-
- for ( i = 1; i < vwMaxLin; i++ )
- if (( vwFirst = vwFirst->Prev ) == vwText->First ) break;
-
- goto displayIt;
- }
- }
-
- if ( vwArgs[ 11 ] ) OFF_SPRITE;
- }
-